﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.Util.Translation;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.UserControls.Curriculo.Cadastro
{
    public partial class Idioma : Curriculo, ICurriculo
    {
        public List<IdiomaCurriculo> Entidades { private get; set; }

        public string ValidationGroup
        {
            get { return txtOutro.ValidationGroup; }
            set
            {
                txtOutro.ValidationGroup = ddlNivel.ValidationGroup = ddlIdioma.ValidationGroup = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            PreencherDropDownLists();

            pnlOutro.Attributes.Add("style", ddlIdioma.SelectedIndex == ddlIdioma.Items.Count - 1
                                                ? "display:block;"
                                                : "display:none;");
        }

        protected override void Render(HtmlTextWriter writer)
        {
            ddlIdioma.Attributes.Add("onchange",
                                     string.Concat("javascript:ChecarOutroIdioma('", ddlIdioma.ClientID, "','",
                                                   pnlOutro.ClientID, "','", txtOutro.ClientID, "');"));

            base.Render(writer);
        }

        private void PreencherDropDownLists()
        {
            WebHelper.FillDropDownList(ddlIdioma, new Domain.Idioma().SelecionarAtivos(), false);
            ddlIdioma.Items.Add(new ListItem(Translator.TranslateMessage(Messages.Outro, AppRelativeVirtualPath), "-1"));
            WebHelper.FillDropDownList(ddlNivel, new Nivel().SelecionarAtivos(), false, "Nome");
        }

        public void Editar()
        {
            IdiomaCurriculo idioma = (from linq in Entidades
                                      where linq.Id.Equals(IdEntidade)
                                      select linq).FirstOrDefault();

            ddlNivel.SelectedValue = idioma.IdNivel.ToString();

            if (!string.IsNullOrEmpty(idioma.Outro))
            {
                txtOutro.Value = idioma.Outro;
                ddlIdioma.SelectedValue = "-1";
                pnlOutro.Attributes.Add("style", "display:block;");
            }
            else
            {
                ddlIdioma.SelectedValue = idioma.IdIdioma.Value.ToString();
                pnlOutro.Attributes.Add("style", "display:none;");
            }
        }

        public void LimparCampos()
        {
            txtOutro.Value = string.Empty;
            ddlIdioma.SelectedIndex = 0;
            ddlNivel.SelectedIndex = 0;
        }

        public void Salvar()
        {
            bool idiomaCadastrado = (from linq in Entidades
                                     where (linq.IdIdioma == int.Parse(ddlIdioma.SelectedValue) ||
                                            linq.Outro == txtOutro.Value)
                                           && (linq.Id != IdEntidade || IdEntidade == 0)
                                     select true).FirstOrDefault();

            if (idiomaCadastrado)
                throw new AlreadyExistsException(Translator.TranslateMessage(Messages.IdiomaJaCadastrado, AppRelativeVirtualPath));

            var idioma = IsNew
                             ? new IdiomaCurriculo()
                             : Entidades.Where(esp => esp.Id == IdEntidade).FirstOrDefault();

            idioma.Ativo = true;
            idioma.IdCurriculo = IdCurriculo;
            idioma.IdNivel = int.Parse(ddlNivel.SelectedValue);

            if (ddlIdioma.SelectedIndex == ddlIdioma.Items.Count - 1)
                idioma.Outro = txtOutro.Value;
            else
            {
                idioma.IdIdioma = int.Parse(ddlIdioma.SelectedValue);
                idioma.Outro = null;
            }

            idioma.Save();

            if (IsNew)
                Entidades.Add(idioma);
        }
    }
}